/*
 * Copyright 2020-2025 the original author or authors.
 * You cannot use this file unless authorized by the author.
 */
package org.ipig.proc.core;

import org.ipig.proc.unit.MetricsUnit;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

/**
 * 模型
 *
 * @author <a href="mailto:comchnts@163.com">chinats</a>
 * @version $$Id: Model.java 3 2020-01-21 09:36:33Z ts <comchnts@163.com> $$
 * @since 1.0
 */
public interface Model {
    /**
     * 唯一ID
     *
     * @return
     */
    public String getId();

    /**
     * 获取业务ns
     *
     * @return
     */
    public String getBiz();

    /**
     * 获取业务维度编码
     *
     * @return
     */
    public String getDim();

    /**
     * 获取业务维度值[多个以下划线隔开]
     *
     * @return
     */
    public String getKey();

    /**
     * 获取时间轴
     *
     * @return
     */
    public Date getTime();

    /**
     * 获取模型变更类型 DbmsOperators.OpType
     *
     * @return
     */
    public String getType();

    /**
     * 记录数量
     *
     * @return
     */
    public Long getCount();

    /**
     * 获取所有的度量指标
     *
     * @return
     */
    public Map<String, MetricsUnit> getAllMetrics();

    /**
     * 获取指定的度量指标
     *
     * @param name
     * @return
     */
    public MetricsUnit getMetrics(String name);

    /**
     * 获取指定的度量指标的值
     *
     * @param name
     * @return
     */
    public BigDecimal getMetricsValue(String name);

    /**
     * 删除标识
     *
     * @return
     */
    public String getDeleted();

    /**
     * 获取指定字段的值
     *
     * @param name
     * @return
     */
    public String getValue(String name);

    /**
     * 获取模型所有字段
     *
     * @return
     */
    public Map<String, String> getAllFields();
}
